package br.ucb.ucblive.managedbean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;

import com.sun.org.apache.xpath.internal.functions.FuncId;

import br.ucb.ucblive.HIB.CursoHIB;
import br.ucb.ucblive.HIB.DisciplinaHIB;
import br.ucb.ucblive.beans.Curso;
import br.ucb.ucblive.beans.Disciplina;
import br.ucb.ucblive.recursos.Functions;
import br.ucb.ucblive.recursos.MensagemConfirmacao;

@ManagedBean (name="cursoManagedBean")
@SessionScoped
public class CursoManagedBean {
	private Curso curso;
	private List<Curso> cursos;
	private CursoHIB cursoHib;
	private List<Disciplina> disciplinas;
	private String query;
	private MensagemConfirmacao mensagemConfirmacao;
	private boolean cursoAlterado;
	
	public CursoManagedBean(){
		setCurso(new Curso());
		setCursos(new ArrayList<Curso>());
		setCursoHib(new CursoHIB());
		setQuery(new String());
		setMensagemConfirmacao(new MensagemConfirmacao());
		setCursoAlterado(false);
	}
 
	
	public boolean isCursoAlterado() {
		return cursoAlterado;
	}


	public void setCursoAlterado(boolean cursoAlterado) {
		this.cursoAlterado = cursoAlterado;
	}


	public MensagemConfirmacao getMensagemConfirmacao() {
		return mensagemConfirmacao;
	}


	public void setMensagemConfirmacao(MensagemConfirmacao mensagemConfirmacao) {
		this.mensagemConfirmacao = mensagemConfirmacao;
	}


	public String getQuery() {
		return query;
	}

	public void setQuery(String query) {
		this.query = query;
	}

	public Curso getCurso() {
		return curso;
	}

	public void setCurso(Curso curso) {
		this.curso = curso;
	}

	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}
	
	
	public CursoHIB getCursoHib() {
		return cursoHib;
	}

	public void setCursoHib(CursoHIB cursoHib) {
		this.cursoHib = cursoHib;
	}
	
	public List<Disciplina> getDisciplinas() {
		return disciplinas;
	}

	public void setDisciplinas(List<Disciplina> disciplinas) {
		this.disciplinas = disciplinas;
	}

	public String insere(){
		cursoHib.salvar(curso);
		setCurso(new Curso());
		if(isCursoAlterado()) getMensagemConfirmacao().cursoAlterado();
		else getMensagemConfirmacao().cursoCriado();
		setCursoAlterado(false);
		return "index.jsf";
	}
	
	public String populaDisciplinas(){
		setCurso(new Curso());
		DisciplinaHIB disciplinaHib = new DisciplinaHIB();
		disciplinas = disciplinaHib.listar();
		return "/adm/cursoForm?faces-redirect=true";
		
	}
	
	public String listarCursos(){
		setCurso(new Curso());
		setCursos(new ArrayList<Curso>());
		List<Curso> users = new ArrayList<Curso>();
		for(Curso c : cursoHib.listar()) {  
            if(c.getNome().toUpperCase().startsWith(query.toUpperCase()))  
                users.add(c);  
        }  		
		cursos.addAll(users);
		setQuery(new String());
		return "/adm/cursoList?faces-redirect=true";
	}
	
    public void excluir (ActionEvent evento){
    	if((evento.getComponent().getAttributes().get("curso") instanceof Curso))
    		curso = (Curso) evento.getComponent().getAttributes().get("curso");
    	cursoHib.excluir(curso);
    	setCursos(new ArrayList<Curso>());
    	setCurso(new Curso());
    	cursos.addAll(cursoHib.listar());
    	getMensagemConfirmacao().cursoExcluido();
    }
    public String atualiza(){
    	curso.setDisciplinaCurso(cursoHib.listarDisciplinasByCurso(curso.getIdCurso()));
    	DisciplinaHIB disciplinaHib = new DisciplinaHIB();
		disciplinas = disciplinaHib.listar();
		setQuery(new String());
		setCursoAlterado(true);
		return "/adm/cursoForm?faces-redirect=true";
	}
    
    public void populaDetalhesCurso(ActionEvent evento){
    	DisciplinaHIB disciplinaHib = new DisciplinaHIB();
    	setDisciplinas(new ArrayList<Disciplina>());
    	curso = (Curso) evento.getComponent().getAttributes().get("curso");
    	for (Disciplina d : cursoHib.listarDisciplinasByCurso(curso.getIdCurso())) {
    		d.setDisciplinaCurso(disciplinaHib.listarCursoByDisciplina(d.getIdDisciplina()));
			d.setDisciplinaProfessor(disciplinaHib.listarProfessorByDisciplina(d.getIdDisciplina()));
            disciplinas.add(d); 
		} 
    	curso.setDisciplinaCurso(cursoHib.listarDisciplinasByCurso(curso.getIdCurso()));
    	curso.setModerador(cursoHib.consultarModeradorByCurso(curso.getIdCurso()));
    }
	
}
